Autentificando el acceso al SendMail

                 Por XeNIX (http://web.screenart.es/tomeu)

Como añadir un sistema de autentificación al Sendmail para que solo puedan utilizar usuarios acreditados, utilizando la libreria SASL (Simple Autentification Security Layer). Configuación e instalación paso a paso.

                      Introducción

A veces por problemas de SPAM en un servidor de mail, se ven obligados a instalar un sistema de Rules al SendMail para filtrar este Ataque masivo de mensajes a parte de esto también se puede añadir el sistema de autentificación al servidor y forzar la utilización de un usuario y contraseña para su utilización.

En este articulo he utilizado la libreria SASL (Security Autentification Secure Layer) el cual nos permite hacer eso al SendMail y a otras aplicaciones que deseemos añadir un minimo de autentificación.
 

                      Instalación & Configuración

1) Necesitamos al menos tener instalada la versión 8.10 del Sendmail, particularmente he utilizado la 8.11.4 que és la ultima versión estable. Aparte de esto también necesitaremos el paquete de Cyrus-SASL v1.5.24 el cual contiene las fuentes para compilar la libreria.
2) Una vez tenemos los dos paquetes vamos a proceder a la configuración y compilación de los paquetes.

Cyrus-SASL

                                # tar zxvf cyrus-sasl-1.5.24.tar.gz
                                                        # cd cyrus-sasl-1.5.24
                                                        # ./configure
                                                        # make
                                                        # make install
 

                                * Creamos un link simbolico dentro /usr/lib que apunte a las librerias del SASL

                                                        # ln -s /usr/local/lib/sasl /usr/lib/sasl
                                                        # chmod 755 /usr/local/lib/sasl
                                                        # cd /usr/lib/sasl
 
 

                                * Seguidamente configuramos con que aplicación debe ir el SASL y que metodo de comprobación de password debe llevar. (sasldb, passwd, shadow, kerberos_v4, etc ...). Aqui utilizaremos el metodo de la sasldb que utiliza el fichero independiente del sistema que contiene los usuarios.

                                                        # echo "pwcheck_method: sasldb" > Sendmail.conf
 

                                Sendmail

                                                       # tar zxvf sendmail.8.11.4.tar.gz
                                                       # cd sendmail-8.11.4
 
 

                                * Ahora tenemos que proceder a configurar la instalación del sendmail, para que nos coja las librerias de Cyrus-SASL. Para eso vamos a proceder la siguiente manera:

                                                       # cd devtools/Site
                                                       # vi site.config.m4
 
 

                                * Insertamos esta serie de lineas:

                                                       APPENDDEF(`confENVDEF', `-DSASL')
                                                       APPENDDEF(`conf_sendmail_LIBS', `-lsasl')
                                                       APPENDDEF(`confLIBDIRS', `-L/usr/local/lib')
                                                       APPENDDEF(`confINCDIRS', `-I/usr/local/include')
 
 

                                * Seguidamente vamos a generar el fichero general de configuración del sendmail el cual se genera a partir de otro que tenemos que editar que está en cf/cf, dentro de este directorio hay una serie de ficheros nosotros tenemos que coger uno de ellos (en mi caso el generic-linux.mc) lo copiamos a uno nuevo llamado config.mc. Lo editamos insertando esta serie de lineas:

                                                       dnl Definimos los metodos de autentificacion
                                                       define(`confAUTH_MECHANISMS', `LOGIN PLAIN GSSAPI KERBEROS_V4 DIGEST-MD5 CRAM-MD5')dnl
                                                       TRUST_AUTH_MECH(`LOGIN PLAIN GSSAPI KERBEROS_V4 DIGEST-MD5 CRAM-MD5')dnl
                                                       DAEMON_OPTIONS(`Port=smtp, Name=MTA')dnl
                                                       FEATURE(`no_default_msa')dnl
                                                       DAEMON_OPTIONS(`Port=587, Name=MSA, M=Ea')dnl
 
 

                                * Una vez creado este fichero procedemos a la compilación del sendmail.

                                                       # cd ../..
                                                       # ./Build
                                                       # cd cf/cf
                                                       # #  Nos genera un fichero de salida .cf con el m4 o sea m4 ../m4/cf.m4 config.mc > config.cf
                                                       # ./Build config.mc
 
 

                                * La fase final seria instalarlo, y hacer una copia del fichero de configuración

                                                       # cd ../../
                                                       # ./Build install
                                                       # cd cf/cf
                                                       # cp -f config.cf /etc/mail/sendmail.cf
 
 

                                * Reiniciamos el servicio sendmail

                                                       # /etc/rc.d/init.d/sendmail restart
 

                      Testeo del sendmail:

Una vez reincio del sendmail tendremos que probar si realmente se ha instalado el soporte del SASL. Lo haremos de la siguiente manera:

                      # /usr/sbin/sendmail -d0.1 -bv root | grep SASL
 

                      Si todo es correcto nos tedria que salir la siguiente linea:

                      NETUNIX NEWDB QUEUE SASL SCANF SMTP USERDB XDEBUG

Que es correcto pasamos a realizar la siguiente prueba, conectarnos al servidor SMTP via telnet para provar si todo es correcto:

                                 # telnet localhost 25
                                 Trying 127.0.0.1...
                                 Connected to indigo.smart.es.
                                 Escape character is '^]'.
                                 220 indigo.smart.es ESMTP Sendmail 8.11.4/8.9.3; Wed, 6 Jun 2001 00:40:00 +0200
                                 EHLO localhost
                                 250-indigo.smart.es Hello IDENT:root@indigo.smart.es [127.0.0.1], pleased to meet you
                                 250-ENHANCEDSTATUSCODES
                                 250-EXPN
                                 250-VERB
                                 250-8BITMIME
                                 250-SIZE
                                 250-DSN
                                 250-ONEX
                                 250-ETRN
                                 250-XUSR
                                 250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5
                                 250 HELP
                                 quit
                                 221 2.0.0 indigo.smart.es closing connection
                                 Connection closed by foreign host.
 

Vale, hasta aqui todo correcto. Si no entramos un LOGIN al servidor no nos va a dejar utilizarlo, o sea utilizano el AUTH. Por eso vamos a crear un usuari para poder utilizar el SMTP, y lo creamos con las utilidades del Cyrus-SASL. En este caso con el saslpasswd por eso vamos a ir al directorio /usr/local/sbin.

                      # ./saslpasswd usuariomail
                                      Password: ..........
                                      Again (for verification): .........

Ahora él nos ha creado un fichero dentro de etc llamado sasldb, el cual contiene la base de datos de los usuarios que creemos para el SASL. Ahora faltaria dar permisos a ese fichero.

                      # chmod 400 /etc/sasldb

Para comprovar si todo es correcto y nos ha creado el usuario vamos a comprovarlo con otra utilidad llamada sasldblistusers la cual nos mostrara todos los usuarios creados

                      # ./sasldblistusers
                                      user: usuariomail realm: indigo.smart.es mech: PLAIN
                                      user: usuariomail realm: indigo.smart.es mech: CRAM-MD5
                                      user: usuariomail realm: indigo.smart.es mech: DIGEST-MD5